package org.example.demo1.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.example.demo1.service.PodCPUMemoryTools;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

/**
 * Pod 诊断相关的API控制器。
 * <p>
 * 该控制器提供了一系列端点，用于调用后端的诊断工具服务，
 * 以获取关于Kubernetes Pod的资源使用情况、配置等信息。
 * </p>
 */
@RestController
@RequestMapping("/api/diagnostics/pod")
public class PodDiagnosticsController {

    private final PodCPUMemoryTools podCPUMemoryTools;

    /**
     * 通过构造函数注入服务类，这是推荐的依赖注入方式。
     *
     * @param podCPUMemoryTools Pod CPU和内存诊断工具服务
     */
    @Autowired
    public PodDiagnosticsController(PodCPUMemoryTools podCPUMemoryTools) {
        this.podCPUMemoryTools = podCPUMemoryTools;
    }

    /**
     * API 端点：获取指定 Pod 的实时 CPU 和内存使用量。
     * <p>
     * <b>如何调用:</b>
     * <pre>
     * GET /api/diagnostics/pod/resource-usage?podName=my-pod&namespace=my-namespace
     * </pre>
     *
     * @param podName     要查询的 Pod 的名称 (必需)。
     * @param namespace   Pod 所在的命名空间 (可选, 如果不提供，将使用服务类中定义的默认值)。
     * @return 一个包含资源使用情况文本描述的 HTTP 响应。
     */
    @GetMapping("/resource-usage")
    public ResponseEntity<String> getPodResourceUsage(
            @RequestParam String podName,
            @RequestParam(required = false) String namespace) {

        String result = podCPUMemoryTools.getPodResourceUsage(podName, namespace);
        return ResponseEntity.ok(result);
    }
    /**
     * 获取指定 Pod 的 CPU 和内存的请求 (requests) 与限制 (limits) 配置。
     *
     * @param podName   Pod 的名称 (路径变量)
     * @param namespace Pod 所在的命名空间 (可选，默认使用服务中定义的 DEFAULT_NAMESPACE)
     * @return 包含资源配置的文本响应
     */
    @GetMapping("/{podName}/resources")
    @Operation(summary = "获取 Pod 资源配置",
            description = "查询指定 Pod 及其所有容器定义的 CPU 和内存的请求 (requests) 与限制 (limits)。")
    public ResponseEntity<String> getPodResources(
            @Parameter(description = "目标 Pod 的名称", required = true)
            @PathVariable String podName,

            @Parameter(description = "Pod 所在的命名空间 (可选)")
            @RequestParam(required = false) String namespace) {

        String result = podCPUMemoryTools.getPodResourceRequestsAndLimits(podName, namespace);
        return ResponseEntity.ok(result);
    }

    // --- 新增的 API 端点 ---
    /**
     * 在指定命名空间中查找CPU或内存使用率最高的Pod。
     *
     * @param namespace 要查询的命名空间 (可选, 如果不提供，将使用服务类中定义的默认值)。
     * @param topN      要返回的 Pod 数量 (可选, 默认为3)。
     * @return 一个包含资源使用率最高的Pod列表的文本描述。
     */
    @GetMapping("/top-consumers")
    @Operation(summary = "查找资源消耗最高的Pod",
            description = "在指定命名空间中，按CPU使用率降序排列，返回资源消耗最高的Pod列表。用于处理'哪个Pod资源占用高'等模糊查询。")
    public ResponseEntity<String> getTopConsumingPods(
            @Parameter(description = "要查询的命名空间 (可选)")
            @RequestParam(required = false) String namespace,

            @Parameter(description = "返回的 Pod 数量 (可选, 默认为3)")
            @RequestParam(required = false, defaultValue = "3") int topN) {

        String result = podCPUMemoryTools.findTopResourceConsumingPods(namespace, topN);
        return ResponseEntity.ok(result);
    }
}


